package com.neuedu.ioDemo;

import java.io.*;

public class ObjectStreamTestDriver {
    public static void main(String[] args) {
            test04();
    }

    /**
     * transient关键字的使用
     */
    private static void test04(){
        //创建一个Student对象
        Student stu0=new Student("张三","150001",90);
        //将stu0变量的内容写出到指定的外部文件中进行持久化处理
        System.out.println("使用对象流持久化之前的Student内容："+stu0);
        //持久化保存的文件名
        String stu0_out01="D:\\temp\\iotest/stu0_out02.dat";
        //对象流写出
        wirteObject(stu0,stu0_out01);
        //使用对象流读取持久化的对象
        Object objReadin=readObject(stu0_out01);
        //验证持久化之前的遍历stu0和使用对象输入流读入的对象 objReadin 是不是同一个实例变量
        System.out.println("stu0==objReadin:"+(stu0==objReadin));


    }

    /**
     * 对象输入流:将对象输入流的内容读取到内存中
     */
    private static void test03(){
        //创建一个Student对象
        Student stu0=new Student("张三","150001",90);
        //将stu0变量的内容写出到指定的外部文件中进行持久化处理
        System.out.println("使用对象流持久化之前的Student内容："+stu0);
        //持久化保存的文件名
        String stu0_out01="D:\\temp\\iotest/stu0_out01.dat";
        //对象流写出
        wirteObject(stu0,stu0_out01);
        //使用对象流读取持久化的对象
        Object objReadin=readObject(stu0_out01);
        //验证持久化之前的遍历stu0和使用对象输入流读入的对象 objReadin 是不是同一个实例变量
        System.out.println("stu0==objReadin:"+(stu0==objReadin));


    }

    /**
     * 对象输入流:将对象输入流的内容读取到内存中
     */
    private static Object readObject(String fileName){
        //默认返回值
        Object obj=null;

        try {
            //创建一个对象输入流实例变量
            ObjectInputStream ois=new ObjectInputStream(
                    new FileInputStream(
                            new File(fileName))
            );
            //读取对象输出流文件
            obj=ois.readObject();
            //输出读入的对象内容
            System.out.println("对象输入流读取对象成功："+obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;

    }





    /**
     *对象输出流方法
     */

    private  static void wirteObject(Object object,String fileName){

        //创建一个对象输出流的实例对象
        try {
            ObjectOutputStream oos=new ObjectOutputStream(
                    new FileOutputStream(
                            new File(fileName)
                    )
            );
            //使用对象输出流将内存中的对象stu0的内容写出到指定的文件中进行持久化保存
            oos.writeObject(object);

            //关闭资源
            if (oos!=null){
                oos.flush();
                oos.close();
            }
            System.out.println("对象保存成功！");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 对象输入流:将对象输入流的内容读取到内存中
     */
    private static Object test02(){
        //默认返回值
        Object obj=null;

        try {
            //创建一个对象输入流实例变量
            ObjectInputStream ois=new ObjectInputStream(
                    new FileInputStream(
                            new File("D:\\temp\\iotest/student01_out.dat"))
            );
            //读取对象输出流文件
             obj=ois.readObject();
             //输出读入的对象内容
            System.out.println("对象输入流读取对象成功："+obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;

    }

    /**
     *对象输出流
     */

    private  static void test01(){
        //创建一个Student类的实例对象
        Student stu0=new Student("张三","150001",90);
        //创建一个对象输出流的实例对象
        try {
            ObjectOutputStream oos=new ObjectOutputStream(
                    new FileOutputStream(
                            new File("D:\\temp\\iotest/student01_out.dat")
                    )
            );
            //使用对象输出流将内存中的对象stu0的内容写出到指定的文件中进行持久化保存
            oos.writeObject(stu0);

            //关闭资源
            if (oos!=null){
                oos.flush();
                oos.close();
            }
            System.out.println("对象保存成功！");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
